R Configuration

Below we display our sessionInfo().

sessionInfo(package=NULL)
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X El Capitan 10.11.6

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plyr_1.8.4  readr_1.1.0

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.10    digest_0.6.11   rprojroot_1.2   mime_0.5        R6_2.2.0        xtable_1.8-2    jsonlite_1.4   
 [8] backports_1.0.5 magrittr_1.5    evaluate_0.10   stringi_1.1.2   rmarkdown_1.3   tools_3.3.2     stringr_1.1.0  
[15] hms_0.3         shiny_1.0.0     rsconnect_0.7   httpuv_1.3.3    yaml_2.1.14     base64enc_0.1-3 htmltools_0.3.5
[22] knitr_1.15.1    tibble_1.3.0   

Introduction

Crime has always been a fascinating topic of discussion. It is human nature to pay attention to gruesome murders and moral corruptness. Why? We don’t know. However, we do know that through media outlets, society has developed an ideology that unemployment leads to higher crime rates. Is this true? Through our R Notebook, we try to show the various relationships between crime and unemployment, as well as independent crime rate and state level monetary analysis in an effort to better understand the truth behind these “ideologies.” We will demonstrate step-by-step instructions on how we created various graphs and charts in Tableau as well as explore the extraordinary visualizations produced through Shiny.

Data

Our employment dataset came from the University of Kentucky Center for Poverty Research (UKCPR). We only focused on the columns that were related through a monetary basis (roughly the first 12 columns). Our crime data came from the U.S. Department of Justice, FBI’s annual Uniform Crime Reporting Statistics. We retrieved the data for all the crime categories listed on the website. Both come from very credible and respected institutions. Thus, the data is very reliable for this project.

ETL

For both datasets we run the relevant ETL operations. We clean the data by first removing special characters (e.g. - ~) from the column names. We then decide which columns are measures and which are dimensions. For dimensions, we change NA to an empty string, change “&” to “and”, change “:” to “;”. We get rid of " and ’. For measures, we change NA to 0. We get rid of all characters except for numbers and the - sign.

[1] "Population"
[1] "Employment"
[1] "Unemployment"
[1] "Unemployment.rate"
[1] "Marginally.Food.Insecure"
[1] "Food.Insecure"
[1] "Very.Low.Food.Secure"
[1] "Gross.State.Product"
[1] "Number.of.low.income.uninsured.children"
[1] "Percent.Low.Income.Unisured.Children"
[1] "Personal.income"
[1] "Workers..compensation"
      state_name      state       year      Population         Employment        Unemployment     Unemployment.rate
 Alabama   :  5   1      :  5   2010:51   Min.   :  564516   Min.   :  283744   Min.   :  11152   Min.   : 2.700   
 Alaska    :  5   10     :  5   2011:51   1st Qu.: 1623796   1st Qu.:  730472   1st Qu.:  54283   1st Qu.: 6.000   
 Arizona   :  5   11     :  5   2012:51   Median : 4382667   Median : 1877812   Median : 157581   Median : 7.300   
 Arkansas  :  5   12     :  5   2013:51   Mean   : 6158836   Mean   : 2796855   Mean   : 244360   Mean   : 7.368   
 California:  5   13     :  5   2014:51   3rd Qu.: 6789176   3rd Qu.: 3235551   3rd Qu.: 288906   3rd Qu.: 8.650   
 Colorado  :  5   14     :  5             Max.   :38792291   Max.   :17348645   Max.   :2244326   Max.   :13.500   
 (Other)   :225   (Other):225                                                                                      
 Marginally.Food.Insecure Food.Insecure    Very.Low.Food.Secure Gross.State.Product Number.of.low.income.uninsured.children
 Min.   :11.71            Min.   : 7.883   Min.   :2.036        Min.   :  26570     Min.   :  1.00                         
 1st Qu.:22.16            1st Qu.:13.051   1st Qu.:4.402        1st Qu.:  76363     1st Qu.: 14.00                         
 Median :25.47            Median :15.394   Median :5.378        Median : 190304     Median : 44.00                         
 Mean   :25.45            Mean   :15.362   Mean   :5.368        Mean   : 315502     Mean   : 83.01                         
 3rd Qu.:28.50            3rd Qu.:17.266   3rd Qu.:6.159        3rd Qu.: 404486     3rd Qu.: 85.00                         
 Max.   :41.08            Max.   :25.224   Max.   :9.197        Max.   :2311616     Max.   :843.00                         
                                                                                                                           
 Percent.Low.Income.Unisured.Children Personal.income     Workers..compensation
 Min.   : 0.700                       Min.   :2.561e+07   Min.   :   7907      
 1st Qu.: 3.000                       1st Qu.:6.498e+07   1st Qu.:  36316      
 Median : 4.100                       Median :1.664e+08   Median : 110973      
 Mean   : 4.756                       Mean   :2.685e+08   Mean   : 298914      
 3rd Qu.: 6.100                       3rd Qu.:3.427e+08   3rd Qu.: 246610      
 Max.   :15.000                       Max.   :1.978e+09   Max.   :2443512      
                                                                               
[1] "Population"
[1] "Violent.crime.total"
[1] "Murder.and.nonnegligent.Manslaughter"
[1] "Legacy.rape..1"
[1] "Revised.rape..2"
[1] "Robbery"
[1] "Aggravated.assault"
[1] "Property.crime.total"
[1] "Burglary"
[1] "Larceny.theft"
[1] "Motor.vehicle.theft"
[1] "Violent.Crime.rate"
[1] "Murder.and.nonnegligent.manslaughter.rate"
[1] "Legacy.rape.rate..1"
[1] "Revised.rape.rate..2"
[1] "Robbery.rate"
[1] "Aggravated.assault.rate"
[1] "Property.crime.rate"
[1] "Burglary.rate"
[1] "Larceny.theft.rate"
[1] "Motor.vehicle.theft.rate"
        State       Population       Violent.crime.total Murder.and.nonnegligent.Manslaughter Legacy.rape..1
 Alabama   :  5   Min.   :  564554   Min.   :   622      Min.   :   7.0                       Min.   :  99  
 Alaska    :  5   1st Qu.: 1623654   1st Qu.:  5386      1st Qu.:  51.5                       1st Qu.: 533  
 Arizona   :  5   Median : 4379730   Median : 15452      Median : 160.0                       Median :1190  
 Arkansas  :  5   Mean   : 6157436   Mean   : 23812      Mean   : 285.6                       Mean   :1651  
 California:  5   3rd Qu.: 6784338   3rd Qu.: 27735      3rd Qu.: 389.0                       3rd Qu.:2012  
 Colorado  :  5   Max.   :38802500   Max.   :164133      Max.   :1884.0                       Max.   :8398  
 (Other)   :225                                                                                             
 Revised.rape..2      Robbery      Aggravated.assault Property.crime.total    Burglary      Larceny.theft   
 Min.   :  110.0   Min.   :   53   Min.   :  432      Min.   :   9551      Min.   :  1689   Min.   :  7273  
 1st Qu.:  772.8   1st Qu.: 1039   1st Qu.: 3376      1st Qu.:  42299      1st Qu.:  8058   1st Qu.: 29452  
 Median : 1592.0   Median : 3689   Median : 9550      Median : 125377      Median : 26196   Median : 89103  
 Mean   : 2258.2   Mean   : 6862   Mean   :14761      Mean   : 172925      Mean   : 39707   Mean   :119222  
 3rd Qu.: 2518.0   3rd Qu.: 7358   3rd Qu.:18087      3rd Qu.: 204282      3rd Qu.: 47990   3rd Qu.:143460  
 Max.   :11527.0   Max.   :58116   Max.   :95877      Max.   :1049465      Max.   :245767   Max.   :654626  
 NA's   :153                                                                                                
 Motor.vehicle.theft Violent.Crime.rate Murder.and.nonnegligent.manslaughter.rate Legacy.rape.rate..1 Revised.rape.rate..2
 Min.   :   244      Min.   :  99.3     Min.   : 0.900                            Min.   : 9.70       Min.   : 13.30      
 1st Qu.:  3792      1st Qu.: 256.4     1st Qu.: 2.500                            1st Qu.:23.90       1st Qu.: 32.08      
 Median :  8626      Median : 329.5     Median : 4.200                            Median :29.00       Median : 38.00      
 Mean   : 13996      Mean   : 372.7     Mean   : 4.401                            Mean   :30.74       Mean   : 41.34      
 3rd Qu.: 15407      3rd Qu.: 449.4     3rd Qu.: 5.600                            3rd Qu.:36.05       3rd Qu.: 47.55      
 Max.   :168608      Max.   :1326.8     Max.   :21.800                            Max.   :89.10       Max.   :125.50      
                                                                                                      NA's   :153         
  Robbery.rate    Aggravated.assault.rate Property.crime.rate Burglary.rate    Larceny.theft.rate Motor.vehicle.theft.rate
 Min.   :  9.10   Min.   : 60.0           Min.   :1524        Min.   : 257.2   Min.   :1161       Min.   : 38.9           
 1st Qu.: 54.60   1st Qu.:153.4           1st Qu.:2260        1st Qu.: 439.2   1st Qu.:1606       1st Qu.:138.4           
 Median : 85.10   Median :218.5           Median :2726        Median : 568.3   Median :1938       Median :198.2           
 Mean   : 96.13   Mean   :236.9           Mean   :2802        Mean   : 621.6   Mean   :1972       Mean   :208.1           
 3rd Qu.:117.95   3rd Qu.:296.2           3rd Qu.:3305        3rd Qu.: 796.5   3rd Qu.:2289       3rd Qu.:253.1           
 Max.   :715.00   Max.   :626.1           Max.   :5182        Max.   :1157.6   Max.   :4082       Max.   :835.7           
                                                                                                                          
   Year   
 2010:51  
 2011:51  
 2012:51  
 2013:51  
 2014:51  
          
          

Tableau Visualizations

Crosstab: Map of Robbery vs Unemployment

vis1
vis2
vis3
vis4
vis5


Description:

This is a map of Robbery vs Unemployment per year (between 2010 and 2014). The darker the color, the higher rate of robbery per unemployment there is for each state. Notice how as we go from 2010 to 2014, the Robbery vs Unemployment rate grows spreads from surrounding areas of Nevada, DC, and Louisiana, like a virus!

Steps:

  1. Double Click on State to show the U.S. Map
  2. Click on Dimension and Create a Calculated FIeld: the formula is: SUM([Robbery])/SUM([Unemployment])
  3. Drag “Year1” to pages
  4. Drag the calculated field from step 2 onto Color, customize step/color to personal taste.
  5. Drag “State Name” for label.
  6. Drag “Population” for detail.
  7. Drag “State” to Filter, and filter out Hawaii and Alaska (We are just going to look at mainland USA)

Histogram: Burglary Rate vs State

vis6
vis7
vis8
vis9
vis10


Description:

This is a histogram, with dots showing the burglary rate (# of burglaries/100k people) per year (between 2010 and 2014). The line represents the average burglary rate. Notice how as we go from 2010 to 2014, the burglary rates decrease significantly.

Steps:

  1. Click on Analysis and Unselect “Aggregated Measures”
  2. Drag “State Name” to Columns
  3. Drag “Burglary Rate” to Rows
  4. Drag “Year” to Pages
  5. Drag Measure Names to “Color”, change color as desired
  6. Go to Analytics and drag Average Line onto graph and select “Pane Line”

Scatterplot: Aggravated Assaults and Robbery

vis11
vis12
vis13
vis14
vis15


Description:

This is a scatterplot showing the relationship between Aggravated Assaults and Robbery per year (between 2010 and 2014). We can see a strong positive linear association between Robberies and Aggravated Assaults through the trend line displayed.

Steps:

  1. Click on Analysis and unselect “Aggregated Measures”
  2. Drag “Aggravated Assaults” to Rows
  3. Drag “Robberies” to Columns
  4. Drag “Year” to Pages
  5. Right click on the graph and click “Trend Lines,” unselect confidence band. The slope seems to be nearly the same for 2010 to 2013. However, the slope is a little steeper in the year 2014, which means that the aggravated assaults is higher than the previous years.

Boxplot: Year vs Property Crime Rate

vis16


Description:

This is a boxplot of property crime rate based on each year. We can see that the property crime rate is slowly decreasing (median wise) as the years progress. DC has the highest property crime rate for all years. They only become outliers for the years: 2012, 2013, and 2014. This means the property crime rate actually decreases for all the other states per year, which makes DC an outlier.

Steps:

  1. Click on Analysis and unselect “Aggregated Measures”
  2. Drag “Year” to columns
  3. Drag “Property Crime Rate” to rows
  4. Drag “Year” to color
  5. Drag “State” to Detail
  6. Go to “Analytics” and drag average line to the chart and select Pane Line
  7. Click on Box Plot on the righthand side.

Barchart: State and Year vs Burglaries

vis17
vis18


Description:

This is a bar chart showing the number of burglaries on each state per year. We manually filtered by big east coast states and west coast states. Notice how West Coast burglaries is significantly higher (around 30k more) than the East Coast burglaries. This could be because of the small number of states classified as “west coast,” giving a large standard deviation.

Steps:

  1. Click on Analysis and unselect “Aggregated Measures”
  2. Drag “Year” and “State” to Rows
  3. Drag “Burglaries” to Columns
  4. Right click on “Burglaries” and select “Measures” then “Average”
  5. Drag “State” to Filter and select designated states.
  6. Go to “Analytics” and drag average line to the chart and select Pane Line

Shiny Application


Crosstab: Crime to employment ratio

vis24


Description:

The Crosstab plots a Crime to Employment Ratio and analyzes every state over the course of 2010-2014. Results indicate that D.C has the highest crime rate by far. Despite changing the sliders multiple times, the area stays with a high KPI. Most nations experience a medium KPI under most settings. The most peaceful nations seem to be Vermont and Wyoming. Vermont especially keeps a very low KPI in almost all settings.


Histogram: Employees aggregated every year

vis22


Description:

The histogram outlines number of employees aggregate every year from 2010 to 2014. Each year has a different histogram. The bucket size for the histograms are 200000 because of how varied populations are across the states. The biggest increase in overall employment happened between 2010 to 2011, though this growth was slow. After that employment seems to have been increasing very slowly the next 2 years.


Scatterplot: Food Insecurity vs Violent Crime Rate

vis23


Description:

The scatter plots a food insecurity ratio on the Y axis and the violent crime rate on the X axis. The only real outlier in terms of results is California which experiences a lower food insecurity but the highest crime rate by far. In terms of interesting results, Mississippi experiences a huge drop in food insecurity after 2010 and then slowly goes back up starting in 2011. It’s interesting because it starts off as the highest in food insecurity and then goes down by a lot, but the violent crime rate stays the same. 2014 seems to indicate that food insecurity on average has gone up by a lot more than in past years. There are very few states with a 10 or less food insecurity ratio.


Boxplot: State vs GSP

vis21


Description:

The boxplot outlines each independent state and their GSP (Gross State Products) over 2010-2014. California has by far the largest GSP with its lowest value of 1953411 being higher than any other state’s GSP . Texas comes in second place followed by New York. These states also have the biggest gaps between the top and bottom of their boxes. The smaller GSP’s are all much more knit together. Vermont has all 5 of the lowest GSP values, but it’s GSP has been going up over the past few years.


Barchart: Violent Crimes Per Year

vis19
vis20


Description:

The black on the barchart represents the total number of violent crimes done. Each state has an independent graph showcasing the number of crimes done from the years 2010-2014. The red line represents the mean number of violent crimes done in that particular state over the timespan. The blue line represents the difference between the mean and the respective year. The range between the state with the least number of crimes and the highest number of crimes was shocking. California has averaged close to 158000 crimes a year while Vermont has averaged only around 800 a year. Outside of that, the results seemed to indicate that murder rate has stayed fairly consistent in most of the US around the time period.


Conclusion

Through the data, one can see many interesting observations. From Robberies being spread from surrounding areas of Nevada, DC, and Louisiana to other states to how west coast burglaries are significantly more than east coast burglaries, we are able to get a broad idea of the rate at which crimes are happening in recent years. Regardless of how a state is doing, in terms of monetary stability or unemployment rates, we have observed burglary rates and property crime rates decreasing throughout the years. It is safe to assume, that as the years increase, given all situations are static, that the following years to come won’t be a “Prime Time for Crime.”

LS0tCnRpdGxlOiAiPGNlbnRlcj48Yj5QcmltZSBUaW1lIGZvciBDcmltZT88L2I+PC9jZW50ZXI+IgphdXRob3I6ICI8Y2VudGVyPjxiPkFydW4sIENvbGluLCBIb25nY2hhbywgSmFjazwvYj48L2NlbnRlcj4iCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKLS0tCgojKipSIENvbmZpZ3VyYXRpb24qKgpCZWxvdyB3ZSBkaXNwbGF5IG91ciBzZXNzaW9uSW5mbygpLgpgYGB7ciBzZXNzaW9uSW5mb30Kc2Vzc2lvbkluZm8ocGFja2FnZT1OVUxMKQpgYGAKCiMqKkludHJvZHVjdGlvbioqCj5DcmltZSBoYXMgYWx3YXlzIGJlZW4gYSBmYXNjaW5hdGluZyB0b3BpYyBvZiBkaXNjdXNzaW9uLiBJdCBpcyBodW1hbiBuYXR1cmUgdG8gcGF5IGF0dGVudGlvbiB0byBncnVlc29tZSBtdXJkZXJzIGFuZCBtb3JhbCBjb3JydXB0bmVzcy4gV2h5PyBXZSBkb27igJl0IGtub3cuIEhvd2V2ZXIsIHdlIGRvIGtub3cgdGhhdCB0aHJvdWdoIG1lZGlhIG91dGxldHMsIHNvY2lldHkgaGFzIGRldmVsb3BlZCBhbiBpZGVvbG9neSB0aGF0IHVuZW1wbG95bWVudCBsZWFkcyB0byBoaWdoZXIgY3JpbWUgcmF0ZXMuIElzIHRoaXMgdHJ1ZT8gVGhyb3VnaCBvdXIgUiBOb3RlYm9vaywgd2UgdHJ5IHRvIHNob3cgdGhlIHZhcmlvdXMgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGNyaW1lIGFuZCB1bmVtcGxveW1lbnQsIGFzIHdlbGwgYXMgaW5kZXBlbmRlbnQgY3JpbWUgcmF0ZSBhbmQgc3RhdGUgbGV2ZWwgbW9uZXRhcnkgYW5hbHlzaXMgaW4gYW4gZWZmb3J0IHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSB0cnV0aCBiZWhpbmQgdGhlc2Ug4oCcaWRlb2xvZ2llcy7igJ0gV2Ugd2lsbCBkZW1vbnN0cmF0ZSBzdGVwLWJ5LXN0ZXAgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB3ZSBjcmVhdGVkIHZhcmlvdXMgZ3JhcGhzIGFuZCBjaGFydHMgaW4gVGFibGVhdSBhcyB3ZWxsIGFzIGV4cGxvcmUgdGhlIGV4dHJhb3JkaW5hcnkgdmlzdWFsaXphdGlvbnMgcHJvZHVjZWQgdGhyb3VnaCBTaGlueS4KCgojKipEYXRhKioKPHA+T3VyIGVtcGxveW1lbnQgZGF0YXNldCBjYW1lIGZyb20gdGhlIFtVbml2ZXJzaXR5IG9mIEtlbnR1Y2t5IENlbnRlciBmb3IgUG92ZXJ0eSBSZXNlYXJjaCAoVUtDUFIpXShodHRwOi8vd3d3LnVrY3ByLm9yZy9kYXRhKS4gV2Ugb25seSBmb2N1c2VkIG9uIHRoZSBjb2x1bW5zIHRoYXQgd2VyZSByZWxhdGVkIHRocm91Z2ggYSBtb25ldGFyeSBiYXNpcyAocm91Z2hseSB0aGUgZmlyc3QgMTIgY29sdW1ucykuIE91ciBjcmltZSBkYXRhIGNhbWUgZnJvbSB0aGUgW1UuUy4gRGVwYXJ0bWVudCBvZiBKdXN0aWNlLCBGQknigJlzIGFubnVhbCBVbmlmb3JtIENyaW1lIFJlcG9ydGluZyBTdGF0aXN0aWNzXShodHRwczovL3d3dy51Y3JkYXRhdG9vbC5nb3YvU2VhcmNoL0NyaW1lL1N0YXRlL09uZVllYXJvZkRhdGEuY2ZtP05vVmFyaWFibGVzPVkmQ0ZJRD0yMTY0ODkwNjgmQ0ZUT0tFTj1lZThkNDRlZmE5YjRkZGQtQjcwMzQ0QzUtOTNCQy1FOUExLTlCQTUxNzA3ODM2QUFDNkMpLiBXZSByZXRyaWV2ZWQgdGhlIGRhdGEgZm9yIGFsbCB0aGUgY3JpbWUgY2F0ZWdvcmllcyBsaXN0ZWQgb24gdGhlIHdlYnNpdGUuIEJvdGggY29tZSBmcm9tIHZlcnkgY3JlZGlibGUgYW5kIHJlc3BlY3RlZCBpbnN0aXR1dGlvbnMuIFRodXMsIHRoZSBkYXRhIGlzIHZlcnkgcmVsaWFibGUgZm9yIHRoaXMgcHJvamVjdC48L3A+CgoKIyoqRVRMKioKCjxwPkZvciBib3RoIGRhdGFzZXRzIHdlIHJ1biB0aGUgcmVsZXZhbnQgRVRMIG9wZXJhdGlvbnMuIFdlIGNsZWFuIHRoZSBkYXRhIGJ5IGZpcnN0IHJlbW92aW5nIHNwZWNpYWwgY2hhcmFjdGVycyAoZS5nLiAtIH4pIGZyb20gdGhlIGNvbHVtbiBuYW1lcy4gV2UgdGhlbiBkZWNpZGUgd2hpY2ggY29sdW1ucyBhcmUgbWVhc3VyZXMgYW5kIHdoaWNoIGFyZSBkaW1lbnNpb25zLiAKRm9yIGRpbWVuc2lvbnMsIHdlIGNoYW5nZSBOQSB0byBhbiBlbXB0eSBzdHJpbmcsIGNoYW5nZSAiJiIgdG8gImFuZCIsIGNoYW5nZSAiOiIgdG8gIjsiLiBXZSBnZXQgcmlkIG9mICIgYW5kICcuIApGb3IgbWVhc3VyZXMsIHdlIGNoYW5nZSBOQSB0byAwLiBXZSBnZXQgcmlkIG9mIGFsbCBjaGFyYWN0ZXJzIGV4Y2VwdCBmb3IgbnVtYmVycyBhbmQgdGhlIC0gc2lnbi48L3A+CgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc291cmNlKCIuLi8wMSBEYXRhL2V0bF9lbXBsb3ltZW50LlIiKQpzdW1tYXJ5KGRmKQpzdWJzZXQoZGYsIHN0YXRlX25hbWUgPT0gIkNhbGlmb3JuaWEiKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzb3VyY2UoIi4uLzAxIERhdGEvZXRsX2NyaW1lLlIiKQpzdW1tYXJ5KGRmKQpzdWJzZXQoZGYsIFN0YXRlID09ICJUZXhhcyIpCmBgYAoKIyoqVGFibGVhdSBWaXN1YWxpemF0aW9ucyoqCiMjIyBDcm9zc3RhYjogTWFwIG9mIFJvYmJlcnkgdnMgVW5lbXBsb3ltZW50CjxjZW50ZXI+IVt2aXMxXSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X0tQSS8yMDEwIFIgdnMgVUUucG5nKTwvY2VudGVyPgo8Y2VudGVyPiFbdmlzMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9LUEkvMjAxMSBSIHZzIFVFLnBuZyk8L2NlbnRlcj4KPGNlbnRlcj4hW3ZpczNdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfS1BJLzIwMTIgUiB2cyBVRS5wbmcpPC9jZW50ZXI+CjxjZW50ZXI+IVt2aXM0XSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X0tQSS8yMDEzIFIgdnMgVUUucG5nKTwvY2VudGVyPgo8Y2VudGVyPiFbdmlzNV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9LUEkvMjAxNCBSIHZzIFVFLnBuZyk8L2NlbnRlcj4KPGJyPgoKIyMjIyBEZXNjcmlwdGlvbjogCjxwPlRoaXMgaXMgYSBtYXAgb2YgUm9iYmVyeSB2cyBVbmVtcGxveW1lbnQgIHBlciB5ZWFyIChiZXR3ZWVuIDIwMTAgYW5kIDIwMTQpLiBUaGUgZGFya2VyIHRoZSBjb2xvciwgdGhlIGhpZ2hlciByYXRlIG9mIHJvYmJlcnkgcGVyIHVuZW1wbG95bWVudCB0aGVyZSBpcyBmb3IgZWFjaCBzdGF0ZS4gTm90aWNlIGhvdyBhcyB3ZSBnbyA8Yj5mcm9tIDIwMTAgdG8gMjAxNCwgdGhlIFJvYmJlcnkgdnMgVW5lbXBsb3ltZW50IHJhdGUgZ3Jvd3Mgc3ByZWFkcyBmcm9tIHN1cnJvdW5kaW5nIGFyZWFzIG9mIE5ldmFkYSwgREMsIGFuZCBMb3Vpc2lhbmEsIGxpa2UgYSB2aXJ1cyE8L2I+PC9wPgoKIyMjIyBTdGVwczoKMS4gRG91YmxlIENsaWNrIG9uIFN0YXRlIHRvIHNob3cgdGhlIFUuUy4gTWFwCjIuIENsaWNrIG9uIERpbWVuc2lvbiBhbmQgQ3JlYXRlIGEgQ2FsY3VsYXRlZCBGSWVsZDogdGhlIGZvcm11bGEgaXM6IFNVTShbUm9iYmVyeV0pL1NVTShbVW5lbXBsb3ltZW50XSkKMy4gRHJhZyDigJxZZWFyMeKAnSB0byBwYWdlcwo0LiBEcmFnIHRoZSBjYWxjdWxhdGVkIGZpZWxkIGZyb20gc3RlcCAyIG9udG8gQ29sb3IsIGN1c3RvbWl6ZSBzdGVwL2NvbG9yIHRvIHBlcnNvbmFsIHRhc3RlLgo1LiBEcmFnIOKAnFN0YXRlIE5hbWXigJ0gZm9yIGxhYmVsLgo2LiBEcmFnIOKAnFBvcHVsYXRpb27igJ0gZm9yIGRldGFpbC4KNy4gRHJhZyDigJxTdGF0ZeKAnSB0byBGaWx0ZXIsIGFuZCBmaWx0ZXIgb3V0IEhhd2FpaSBhbmQgQWxhc2thIChXZSBhcmUganVzdCBnb2luZyB0byBsb29rIGF0IG1haW5sYW5kIFVTQSkKCgojIyMgSGlzdG9ncmFtOiBCdXJnbGFyeSBSYXRlIHZzIFN0YXRlCjxjZW50ZXI+IVt2aXM2XSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X0hpc3RvZ3JhbS8yMDEwIFIgdnMgU3RhdGUucG5nKTwvY2VudGVyPgo8Y2VudGVyPiFbdmlzN10oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9IaXN0b2dyYW0vMjAxMSBSIHZzIFN0YXRlLnBuZyk8L2NlbnRlcj4KPGNlbnRlcj4hW3ZpczhdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfSGlzdG9ncmFtLzIwMTIgUiB2cyBTdGF0ZS5wbmcpPC9jZW50ZXI+CjxjZW50ZXI+IVt2aXM5XSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X0hpc3RvZ3JhbS8yMDEzIFIgdnMgU3RhdGUucG5nKTwvY2VudGVyPgo8Y2VudGVyPiFbdmlzMTBdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfSGlzdG9ncmFtLzIwMTQgUiB2cyBTdGF0ZS5wbmcpPC9jZW50ZXI+Cjxicj4KCiMjIyMgRGVzY3JpcHRpb246IAo8cD5UaGlzIGlzIGEgaGlzdG9ncmFtLCB3aXRoIGRvdHMgc2hvd2luZyB0aGUgYnVyZ2xhcnkgcmF0ZSAoIyBvZiBidXJnbGFyaWVzLzEwMGsgcGVvcGxlKSAgcGVyIHllYXIgKGJldHdlZW4gMjAxMCBhbmQgMjAxNCkuIFRoZSBsaW5lIHJlcHJlc2VudHMgdGhlIGF2ZXJhZ2UgYnVyZ2xhcnkgcmF0ZS4gTm90aWNlIGhvdyBhcyB3ZSBnbyA8Yj5mcm9tIDIwMTAgdG8gMjAxNCwgdGhlIGJ1cmdsYXJ5IHJhdGVzIGRlY3JlYXNlIHNpZ25pZmljYW50bHkuPC9iPjwvcD4KCiMjIyMgU3RlcHM6CjEuIENsaWNrIG9uIEFuYWx5c2lzIGFuZCBVbnNlbGVjdCDigJxBZ2dyZWdhdGVkIE1lYXN1cmVz4oCdCjIuIERyYWcg4oCcU3RhdGUgTmFtZeKAnSB0byBDb2x1bW5zCjMuIERyYWcg4oCcQnVyZ2xhcnkgUmF0ZeKAnSB0byBSb3dzCjQuIERyYWcg4oCcWWVhcuKAnSB0byBQYWdlcwo1LiBEcmFnIE1lYXN1cmUgTmFtZXMgdG8g4oCcQ29sb3LigJ0sIGNoYW5nZSBjb2xvciBhcyBkZXNpcmVkCjYuIEdvIHRvIEFuYWx5dGljcyBhbmQgZHJhZyBBdmVyYWdlIExpbmUgb250byBncmFwaCBhbmQgc2VsZWN0IOKAnFBhbmUgTGluZeKAnQoKIyMjIFNjYXR0ZXJwbG90OiBBZ2dyYXZhdGVkIEFzc2F1bHRzIGFuZCBSb2JiZXJ5CjxjZW50ZXI+IVt2aXMxMV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9TY2F0dGVyL3NjYXR0ZXIgcGxvdCAyMDEwLnBuZyk8L2NlbnRlcj4KPGNlbnRlcj4hW3ZpczEyXSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X1NjYXR0ZXIvc2NhdHRlciBwbG90IDIwMTEucG5nKTwvY2VudGVyPgo8Y2VudGVyPiFbdmlzMTNdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfU2NhdHRlci9zY2F0dGVyIHBsb3QgMjAxMi5wbmcpPC9jZW50ZXI+CjxjZW50ZXI+IVt2aXMxNF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9TY2F0dGVyL3NjYXR0ZXIgcGxvdCAyMDEzLnBuZyk8L2NlbnRlcj4KPGNlbnRlcj4hW3ZpczE1XSguLi8wMyBWaXN1YWxpemF0aW9ucy9UYWJsZWF1X1NjYXR0ZXIvc2NhdHRlciBwbG90IDIwMTQucG5nKTwvY2VudGVyPgo8YnI+CgojIyMjIERlc2NyaXB0aW9uOiAKPHA+VGhpcyBpcyBhIHNjYXR0ZXJwbG90IHNob3dpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEFnZ3JhdmF0ZWQgQXNzYXVsdHMgYW5kIFJvYmJlcnkgcGVyIHllYXIgKGJldHdlZW4gMjAxMCBhbmQgMjAxNCkuIDxiPldlIGNhbiBzZWUgYSBzdHJvbmcgcG9zaXRpdmUgbGluZWFyIGFzc29jaWF0aW9uIGJldHdlZW4gUm9iYmVyaWVzIGFuZCBBZ2dyYXZhdGVkIEFzc2F1bHRzIHRocm91Z2ggdGhlIHRyZW5kIGxpbmUgZGlzcGxheWVkLjwvYj48L3A+CgojIyMjIFN0ZXBzOgoxLiBDbGljayBvbiBBbmFseXNpcyBhbmQgdW5zZWxlY3Qg4oCcQWdncmVnYXRlZCBNZWFzdXJlc+KAnQoyLiBEcmFnIOKAnEFnZ3JhdmF0ZWQgQXNzYXVsdHPigJ0gdG8gUm93cwozLiBEcmFnIOKAnFJvYmJlcmllc+KAnSB0byBDb2x1bW5zCjQuIERyYWcg4oCcWWVhcuKAnSB0byBQYWdlcwo1LiBSaWdodCBjbGljayBvbiB0aGUgZ3JhcGggYW5kIGNsaWNrIOKAnFRyZW5kIExpbmVzLOKAnSB1bnNlbGVjdCBjb25maWRlbmNlIGJhbmQuIFRoZSBzbG9wZSBzZWVtcyB0byBiZSBuZWFybHkgdGhlIHNhbWUgZm9yIDIwMTAgdG8gMjAxMy4gSG93ZXZlciwgdGhlIHNsb3BlIGlzIGEgbGl0dGxlIHN0ZWVwZXIgaW4gdGhlIHllYXIgMjAxNCwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgYWdncmF2YXRlZCBhc3NhdWx0cyBpcyBoaWdoZXIgdGhhbiB0aGUgcHJldmlvdXMgeWVhcnMuIAoKIyMjIEJveHBsb3Q6IFllYXIgdnMgUHJvcGVydHkgQ3JpbWUgUmF0ZQo8Y2VudGVyPiFbdmlzMTZdKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfQm94L2JveCBwbG90IHByb3BlcnR5IGNyaW1lIHJhdGUucG5nKTwvY2VudGVyPgo8YnI+CgojIyMjIERlc2NyaXB0aW9uOiAKPHA+VGhpcyBpcyBhIGJveHBsb3Qgb2YgcHJvcGVydHkgY3JpbWUgcmF0ZSBiYXNlZCBvbiBlYWNoIHllYXIuIFdlIGNhbiBzZWUgdGhhdCB0aGUgPGI+cHJvcGVydHkgY3JpbWUgcmF0ZSBpcyBzbG93bHkgZGVjcmVhc2luZyAobWVkaWFuIHdpc2UpIGFzIHRoZSB5ZWFycyBwcm9ncmVzcy48L2I+IERDIGhhcyB0aGUgaGlnaGVzdCBwcm9wZXJ0eSBjcmltZSByYXRlIGZvciBhbGwgeWVhcnMuIFRoZXkgb25seSBiZWNvbWUgb3V0bGllcnMgZm9yIHRoZSB5ZWFyczogMjAxMiwgMjAxMywgYW5kIDIwMTQuIFRoaXMgbWVhbnMgdGhlIHByb3BlcnR5IGNyaW1lIHJhdGUgYWN0dWFsbHkgZGVjcmVhc2VzIGZvciBhbGwgdGhlIG90aGVyIHN0YXRlcyBwZXIgeWVhciwgd2hpY2ggbWFrZXMgREMgYW4gb3V0bGllci4gPC9wPgoKIyMjIyBTdGVwczoKMS4gQ2xpY2sgb24gQW5hbHlzaXMgYW5kIHVuc2VsZWN0IOKAnEFnZ3JlZ2F0ZWQgTWVhc3VyZXPigJ0KMi4gRHJhZyDigJxZZWFy4oCdIHRvIGNvbHVtbnMKMy4gRHJhZyDigJxQcm9wZXJ0eSBDcmltZSBSYXRl4oCdIHRvIHJvd3MKNC4gRHJhZyDigJxZZWFy4oCdIHRvIGNvbG9yCjUuIERyYWcg4oCcU3RhdGXigJ0gdG8gRGV0YWlsCjYuIEdvIHRvIOKAnEFuYWx5dGljc+KAnSBhbmQgZHJhZyBhdmVyYWdlIGxpbmUgdG8gdGhlIGNoYXJ0IGFuZCBzZWxlY3QgUGFuZSBMaW5lCjcuIENsaWNrIG9uIEJveCBQbG90IG9uIHRoZSByaWdodGhhbmQgc2lkZS4KCiMjIyBCYXJjaGFydDogU3RhdGUgYW5kIFllYXIgdnMgQnVyZ2xhcmllcwo8Y2VudGVyPiFbdmlzMTddKC4uLzAzIFZpc3VhbGl6YXRpb25zL1RhYmxlYXVfQmFyX3Bsb3QvYmFyIHBsb3Qgd2VzdC5wbmcpPC9jZW50ZXI+CjxjZW50ZXI+IVt2aXMxOF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvVGFibGVhdV9CYXJfcGxvdC9iYXIgcGxvdCBlYXN0LnBuZyk8L2NlbnRlcj4KPGJyPgoKIyMjIyBEZXNjcmlwdGlvbjogCjxwPlRoaXMgaXMgYSBiYXIgY2hhcnQgc2hvd2luZyB0aGUgbnVtYmVyIG9mIGJ1cmdsYXJpZXMgb24gZWFjaCBzdGF0ZSBwZXIgeWVhci4gV2UgbWFudWFsbHkgZmlsdGVyZWQgYnkgYmlnIGVhc3QgY29hc3Qgc3RhdGVzIGFuZCB3ZXN0IGNvYXN0IHN0YXRlcy4gTm90aWNlIGhvdyA8Yj5XZXN0IENvYXN0IGJ1cmdsYXJpZXMgaXMgc2lnbmlmaWNhbnRseSBoaWdoZXIgKGFyb3VuZCAzMGsgbW9yZSkgdGhhbiB0aGUgRWFzdCBDb2FzdCAgYnVyZ2xhcmllcy4gVGhpcyBjb3VsZCBiZSBiZWNhdXNlIG9mIHRoZSBzbWFsbCBudW1iZXIgb2Ygc3RhdGVzIGNsYXNzaWZpZWQgYXMg4oCcd2VzdCBjb2FzdCzigJ0gZ2l2aW5nIGEgbGFyZ2Ugc3RhbmRhcmQgZGV2aWF0aW9uLjwvYj48L3A+CgojIyMjIFN0ZXBzOgoxLiBDbGljayBvbiBBbmFseXNpcyBhbmQgdW5zZWxlY3Qg4oCcQWdncmVnYXRlZCBNZWFzdXJlc+KAnQoyLiBEcmFnIOKAnFllYXLigJ0gYW5kIOKAnFN0YXRl4oCdIHRvIFJvd3MKMy4gRHJhZyDigJxCdXJnbGFyaWVz4oCdIHRvIENvbHVtbnMKNC4gUmlnaHQgY2xpY2sgb24g4oCcQnVyZ2xhcmllc+KAnSBhbmQgc2VsZWN0IOKAnE1lYXN1cmVz4oCdIHRoZW4g4oCcQXZlcmFnZeKAnQo1LiBEcmFnIOKAnFN0YXRl4oCdIHRvIEZpbHRlciBhbmQgc2VsZWN0IGRlc2lnbmF0ZWQgc3RhdGVzLgo2LiBHbyB0byDigJxBbmFseXRpY3PigJ0gYW5kIGRyYWcgYXZlcmFnZSBsaW5lIHRvIHRoZSBjaGFydCBhbmQgc2VsZWN0IFBhbmUgTGluZQoKCiMqKlNoaW55IEFwcGxpY2F0aW9uKioKPGJyPgoKIyMjIENyb3NzdGFiOiBDcmltZSB0byBlbXBsb3ltZW50IHJhdGlvCjxjZW50ZXI+IVt2aXMyNF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvU0hJTllDcm9zc1RhYi5wbmcpPC9jZW50ZXI+Cjxicj4KCiMjIyMgRGVzY3JpcHRpb246IAo8cD5UaGUgQ3Jvc3N0YWIgcGxvdHMgYSBDcmltZSB0byBFbXBsb3ltZW50IFJhdGlvIGFuZCBhbmFseXplcyBldmVyeSBzdGF0ZSBvdmVyIHRoZSBjb3Vyc2Ugb2YgMjAxMC0yMDE0LiA8Yj5SZXN1bHRzIGluZGljYXRlIHRoYXQgRC5DIGhhcyB0aGUgaGlnaGVzdCBjcmltZSByYXRlIGJ5IGZhci4gPC9iPiBEZXNwaXRlIGNoYW5naW5nIHRoZSBzbGlkZXJzIG11bHRpcGxlIHRpbWVzLCB0aGUgYXJlYSBzdGF5cyB3aXRoIGEgaGlnaCBLUEkuIE1vc3QgbmF0aW9ucyBleHBlcmllbmNlIGEgbWVkaXVtIEtQSSB1bmRlciBtb3N0IHNldHRpbmdzLiA8Yj5UaGUgbW9zdCBwZWFjZWZ1bCBuYXRpb25zIHNlZW0gdG8gYmUgVmVybW9udCBhbmQgV3lvbWluZy4gVmVybW9udCBlc3BlY2lhbGx5IGtlZXBzIGEgdmVyeSBsb3cgS1BJIGluIGFsbW9zdCBhbGwgc2V0dGluZ3MuIDwvYj4KPC9wPgo8YnI+CgojIyMgSGlzdG9ncmFtOiBFbXBsb3llZXMgYWdncmVnYXRlZCBldmVyeSB5ZWFyCjxjZW50ZXI+IVt2aXMyMl0oLi4vMDMgVmlzdWFsaXphdGlvbnMvU0hJTllIaXN0b2dyYW0ucG5nKTwvY2VudGVyPgo8YnI+CgojIyMjIERlc2NyaXB0aW9uOiAKPHA+VGhlIGhpc3RvZ3JhbSBvdXRsaW5lcyBudW1iZXIgb2YgZW1wbG95ZWVzIGFnZ3JlZ2F0ZSBldmVyeSB5ZWFyIGZyb20gMjAxMCB0byAyMDE0LiBFYWNoIHllYXIgaGFzIGEgZGlmZmVyZW50IGhpc3RvZ3JhbS4gVGhlIGJ1Y2tldCBzaXplIGZvciB0aGUgaGlzdG9ncmFtcyBhcmUgMjAwMDAwIGJlY2F1c2Ugb2YgaG93IHZhcmllZCBwb3B1bGF0aW9ucyBhcmUgYWNyb3NzIHRoZSBzdGF0ZXMuIDxiPlRoZSBiaWdnZXN0IGluY3JlYXNlIGluIG92ZXJhbGwgZW1wbG95bWVudCBoYXBwZW5lZCBiZXR3ZWVuIDIwMTAgdG8gMjAxMTwvYj4sIHRob3VnaCB0aGlzIGdyb3d0aCB3YXMgc2xvdy4gQWZ0ZXIgdGhhdCBlbXBsb3ltZW50IHNlZW1zIHRvIGhhdmUgYmVlbiBpbmNyZWFzaW5nIHZlcnkgc2xvd2x5IHRoZSBuZXh0IDIgeWVhcnMuCjwvcD4KPGJyPgoKIyMjIFNjYXR0ZXJwbG90OiBGb29kIEluc2VjdXJpdHkgdnMgVmlvbGVudCBDcmltZSBSYXRlCjxjZW50ZXI+IVt2aXMyM10oLi4vMDMgVmlzdWFsaXphdGlvbnMvU0hJTllTY2F0dGVyUGxvdC5wbmcpPC9jZW50ZXI+Cjxicj4KCiMjIyMgRGVzY3JpcHRpb246IAo8cD5UaGUgc2NhdHRlciBwbG90cyBhIGZvb2QgaW5zZWN1cml0eSByYXRpbyBvbiB0aGUgWSBheGlzIGFuZCB0aGUgdmlvbGVudCBjcmltZSByYXRlIG9uIHRoZSBYIGF4aXMuIFRoZSBvbmx5IHJlYWwgb3V0bGllciBpbiB0ZXJtcyBvZiByZXN1bHRzIGlzIENhbGlmb3JuaWEgd2hpY2ggZXhwZXJpZW5jZXMgYSBsb3dlciBmb29kIGluc2VjdXJpdHkgYnV0IHRoZSBoaWdoZXN0IGNyaW1lIHJhdGUgYnkgZmFyLiBJbiB0ZXJtcyBvZiBpbnRlcmVzdGluZyByZXN1bHRzLCA8Yj5NaXNzaXNzaXBwaSBleHBlcmllbmNlcyBhIGh1Z2UgZHJvcCBpbiBmb29kIGluc2VjdXJpdHkgYWZ0ZXIgMjAxMCBhbmQgdGhlbiBzbG93bHkgZ29lcyBiYWNrIHVwIHN0YXJ0aW5nIGluIDIwMTEuIEl04oCZcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN0YXJ0cyBvZmYgYXMgdGhlIGhpZ2hlc3QgaW4gZm9vZCBpbnNlY3VyaXR5IGFuZCB0aGVuIGdvZXMgZG93biBieSBhIGxvdCwgYnV0IHRoZSB2aW9sZW50IGNyaW1lIHJhdGUgc3RheXMgdGhlIHNhbWUuPC9iPiAyMDE0IHNlZW1zIHRvIGluZGljYXRlIHRoYXQgZm9vZCBpbnNlY3VyaXR5IG9uIGF2ZXJhZ2UgaGFzIGdvbmUgdXAgYnkgYSBsb3QgbW9yZSB0aGFuIGluIHBhc3QgeWVhcnMuIFRoZXJlIGFyZSB2ZXJ5IGZldyBzdGF0ZXMgd2l0aCBhIDEwIG9yIGxlc3MgZm9vZCBpbnNlY3VyaXR5IHJhdGlvLgo8L3A+Cjxicj4KCiMjIyBCb3hwbG90OiBTdGF0ZSB2cyBHU1AgCjxjZW50ZXI+IVt2aXMyMV0oLi4vMDMgVmlzdWFsaXphdGlvbnMvU0hJTllCb3hwbG90LnBuZyk8L2NlbnRlcj4KPGJyPgoKIyMjIyBEZXNjcmlwdGlvbjogCjxwPlRoZSBib3hwbG90IG91dGxpbmVzIGVhY2ggaW5kZXBlbmRlbnQgc3RhdGUgYW5kIHRoZWlyIEdTUCAoR3Jvc3MgU3RhdGUgUHJvZHVjdHMpIG92ZXIgMjAxMC0yMDE0LiBDYWxpZm9ybmlhIGhhcyBieSBmYXIgdGhlIGxhcmdlc3QgR1NQIHdpdGggaXRzIGxvd2VzdCB2YWx1ZSBvZiAxOTUzNDExIGJlaW5nIGhpZ2hlciB0aGFuIGFueSBvdGhlciBzdGF0ZSdzIEdTUCAuIFRleGFzIGNvbWVzIGluIHNlY29uZCBwbGFjZSBmb2xsb3dlZCBieSBOZXcgWW9yay4gVGhlc2Ugc3RhdGVzIGFsc28gaGF2ZSB0aGUgYmlnZ2VzdCBnYXBzIGJldHdlZW4gdGhlIHRvcCBhbmQgYm90dG9tIG9mIHRoZWlyIGJveGVzLiBUaGUgc21hbGxlciBHU1DigJlzIGFyZSBhbGwgbXVjaCBtb3JlIGtuaXQgdG9nZXRoZXIuIDxiPlZlcm1vbnQgaGFzIGFsbCA1IG9mIHRoZSBsb3dlc3QgR1NQIHZhbHVlcywgYnV0IGl04oCZcyBHU1AgaGFzIGJlZW4gZ29pbmcgdXAgb3ZlciB0aGUgcGFzdCBmZXcgeWVhcnMuPC9iPgo8L3A+Cjxicj4KCiMjIyBCYXJjaGFydDogVmlvbGVudCBDcmltZXMgUGVyIFllYXIKPGNlbnRlcj4hW3ZpczE5XSguLi8wMyBWaXN1YWxpemF0aW9ucy9TSElOWUJhcmNoYXJ0MS5wbmcpPC9jZW50ZXI+CjxjZW50ZXI+IVt2aXMyMF0oLi4vMDMgVmlzdWFsaXphdGlvbnMvU0hJTllCYXJjaGFydDIucG5nKTwvY2VudGVyPgo8YnI+CgojIyMjIERlc2NyaXB0aW9uOiAKPHA+VGhlIGJsYWNrIG9uIHRoZSBiYXJjaGFydCByZXByZXNlbnRzIHRoZSB0b3RhbCBudW1iZXIgb2YgdmlvbGVudCBjcmltZXMgZG9uZS4gRWFjaCBzdGF0ZSBoYXMgYW4gaW5kZXBlbmRlbnQgZ3JhcGggc2hvd2Nhc2luZyB0aGUgbnVtYmVyIG9mIGNyaW1lcyBkb25lIGZyb20gdGhlIHllYXJzIDIwMTAtMjAxNC4gVGhlIHJlZCBsaW5lIHJlcHJlc2VudHMgdGhlIG1lYW4gbnVtYmVyIG9mIHZpb2xlbnQgY3JpbWVzIGRvbmUgaW4gdGhhdCBwYXJ0aWN1bGFyIHN0YXRlIG92ZXIgdGhlIHRpbWVzcGFuLiBUaGUgYmx1ZSBsaW5lIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbWVhbiBhbmQgdGhlIHJlc3BlY3RpdmUgeWVhci4gIDxiPlRoZSByYW5nZSBiZXR3ZWVuIHRoZSBzdGF0ZSB3aXRoIHRoZSBsZWFzdCBudW1iZXIgb2YgY3JpbWVzIGFuZCB0aGUgaGlnaGVzdCBudW1iZXIgb2YgY3JpbWVzIHdhcyBzaG9ja2luZy4gQ2FsaWZvcm5pYSBoYXMgYXZlcmFnZWQgY2xvc2UgdG8gMTU4MDAwIGNyaW1lcyBhIHllYXIgd2hpbGUgVmVybW9udCBoYXMgYXZlcmFnZWQgb25seSBhcm91bmQgODAwIGEgeWVhci48L2I+IE91dHNpZGUgb2YgdGhhdCwgdGhlIHJlc3VsdHMgc2VlbWVkIHRvIGluZGljYXRlIHRoYXQgbXVyZGVyIHJhdGUgaGFzIHN0YXllZCBmYWlybHkgY29uc2lzdGVudCBpbiBtb3N0IG9mIHRoZSBVUyBhcm91bmQgdGhlIHRpbWUgcGVyaW9kLjwvcD4KPGJyPgoKCiMqKkNvbmNsdXNpb24qKgo8cD5UaHJvdWdoIHRoZSBkYXRhLCBvbmUgY2FuIHNlZSBtYW55IGludGVyZXN0aW5nIG9ic2VydmF0aW9ucy4gRnJvbSBSb2JiZXJpZXMgYmVpbmcgc3ByZWFkIGZyb20gc3Vycm91bmRpbmcgYXJlYXMgb2YgTmV2YWRhLCBEQywgYW5kIExvdWlzaWFuYSB0byBvdGhlciBzdGF0ZXMgdG8gaG93IHdlc3QgY29hc3QgYnVyZ2xhcmllcyBhcmUgc2lnbmlmaWNhbnRseSBtb3JlIHRoYW4gZWFzdCBjb2FzdCBidXJnbGFyaWVzLCB3ZSBhcmUgYWJsZSB0byBnZXQgYSBicm9hZCBpZGVhIG9mIHRoZSByYXRlIGF0IHdoaWNoIGNyaW1lcyBhcmUgaGFwcGVuaW5nIGluIHJlY2VudCB5ZWFycy4gUmVnYXJkbGVzcyBvZiBob3cgYSBzdGF0ZSBpcyBkb2luZywgaW4gdGVybXMgb2YgbW9uZXRhcnkgc3RhYmlsaXR5IG9yIHVuZW1wbG95bWVudCByYXRlcywgd2UgaGF2ZSBvYnNlcnZlZCBidXJnbGFyeSByYXRlcyBhbmQgcHJvcGVydHkgY3JpbWUgcmF0ZXMgZGVjcmVhc2luZyB0aHJvdWdob3V0IHRoZSB5ZWFycy4gSXQgaXMgc2FmZSB0byBhc3N1bWUsIHRoYXQgYXMgdGhlIHllYXJzIGluY3JlYXNlLCBnaXZlbiBhbGwgc2l0dWF0aW9ucyBhcmUgc3RhdGljLCB0aGF0IHRoZSBmb2xsb3dpbmcgeWVhcnMgdG8gY29tZSB3b27igJl0IGJlIGEg4oCcUHJpbWUgVGltZSBmb3IgQ3JpbWUu4oCdPC9wPgoKIyoqTGluayB0byBTaGlueSBBcHBsaWNhdGlvbioqCkhlcmUgaXMgdGhlIHdlYnNpdGUgdG8gdGhlIHNoaW55IGFwcGxpY2F0aW9uIDogaHR0cHM6Ly90ZXNzZXJhY3QyMDEwLnNoaW55YXBwcy5pby9maW5hbHByb2plY3QvCgo=